home *** CD-ROM | disk | FTP | other *** search
/ Giga Games 1 / Giga Games.iso / net / usenet / volume7 / nethack3 / patch6h < prev    next >
Encoding:
Internet Message Format  |  1989-11-27  |  56.4 KB

  1. Path: uunet!zephyr.ens.tek.com!tekgen!tekred!saab!billr
  2. From: billr@saab.CNA.TEK.COM (Bill Randle)
  3. Newsgroups: comp.sources.games
  4. Subject: v08i061:  NetHack3 -  display oriented dungeons & dragons (Ver. 3.0), Patch6h
  5. Message-ID: <4850@tekred.CNA.TEK.COM>
  6. Date: 22 Nov 89 19:52:21 GMT
  7. Sender: nobody@tekred.CNA.TEK.COM
  8. Lines: 2240
  9. Approved: billr@saab.CNA.TEK.COM
  10.  
  11. Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
  12. Posting-number: Volume 8, Issue 61
  13. Archive-name: NetHack3/Patch6h
  14. Patch-To: NetHack3: Volume 7, Issue 56-93
  15.  
  16.  
  17.  
  18. #! /bin/sh
  19. # This is a shell archive.  Remove anything before this line, then unpack
  20. # it by saving it into a file and typing "sh file".  To overwrite existing
  21. # files, type "sh file -c".  You can also feed this as standard input via
  22. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  23. # will see the following message at the end:
  24. #        "End of archive 8 (of 15)."
  25. # Contents:  patches06e
  26. # Wrapped by billr@saab on Wed Nov 22 10:50:14 1989
  27. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  28. if test -f 'patches06e' -a "${1}" != "-c" ; then 
  29.   echo shar: Will not clobber existing file \"'patches06e'\"
  30. else
  31. echo shar: Extracting \"'patches06e'\" \(53756 characters\)
  32. sed "s/^X//" >'patches06e' <<'END_OF_FILE'
  33. X*** src/Old/Makefile.src    Sun Nov 19 12:30:37 1989
  34. X--- src/Makefile.src    Thu Nov  9 18:09:45 1989
  35. X***************
  36. X*** 47,58 ****
  37. X  CFLAGS = -O -I../include
  38. X  LFLAGS =
  39. X  
  40. X- # object files for makedefs
  41. X- MAKEOBJS = makedefs.o monst.o objects.o panic.o
  42. X- 
  43. X- # object files for special levels compiler
  44. X- SPLEVOBJS = lev_comp.o lev_lex.o lev_main.o alloc.o monst.o objects.o panic.o
  45. X- 
  46. X  # on some systems the termcap library is in -ltermcap or -lcurses
  47. X  # on 386 Xenix, the -ltermlib tputs() seems not to work; use -lcurses instead
  48. X  # Sysatt uses shared library in lieu of this option
  49. X--- 47,52 ----
  50. X***************
  51. X*** 105,115 ****
  52. X  
  53. X  HACKINCL = amiconf.h artifact.h attrib.h color.h config.h coord.h decl.h\
  54. X         def_os2.h edog.h epri.h eshk.h extern.h flag.h func_tab.h global.h\
  55. X!        gold.h hack.h lev.h mfndpos.h mkroom.h monattk.h mondata.h monflag.h\
  56. X!        monst.h monsym.h msdos.h obj.h objclass.h patchlevel.h pcconf.h\
  57. X!        permonst.h prop.h rm.h sp_lev.h spell.h system.h tosconf.h\
  58. X!        tradstdc.h trapname.h unixconf.h vault.h vmsconf.h wseg.h you.h\
  59. X!        youprop.h
  60. X  
  61. X  # all .h files except date.h, onames.h, pm.h & trap.h which would cause
  62. X  # dependency loops if run through "make depend".
  63. X--- 99,109 ----
  64. X  
  65. X  HACKINCL = amiconf.h artifact.h attrib.h color.h config.h coord.h decl.h\
  66. X         def_os2.h edog.h epri.h eshk.h extern.h flag.h func_tab.h global.h\
  67. X!        gold.h hack.h lev.h macconf.h mfndpos.h mkroom.h monattk.h mondata.h\
  68. X!        monflag.h monst.h monsym.h msdos.h obj.h objclass.h patchlevel.h\
  69. X!        pcconf.h permonst.h prop.h rm.h sp_lev.h spell.h system.h termcap.h\
  70. X!        tosconf.h tradstdc.h trapname.h unixconf.h vault.h vmsconf.h wseg.h\
  71. X!        you.h youprop.h
  72. X  
  73. X  # all .h files except date.h, onames.h, pm.h & trap.h which would cause
  74. X  # dependency loops if run through "make depend".
  75. X***************
  76. X*** 119,124 ****
  77. X--- 113,124 ----
  78. X  
  79. X  SOURCES = $(CSOURCES) $(HSOURCES)
  80. X  
  81. X+ # object files for makedefs
  82. X+ MAKEOBJS = makedefs.o monst.o objects.o panic.o
  83. X+ 
  84. X+ # object files for special levels compiler
  85. X+ SPLEVOBJS = lev_comp.o lev_lex.o lev_main.o alloc.o monst.o objects.o panic.o
  86. X+ 
  87. X  HOBJ = allmain.o alloc.o apply.o artifact.o attrib.o bones.o cmd.o dbridge.o\
  88. X      decl.o demon.o do.o do_name.o do_wear.o dog.o dogmove.o dokick.o\
  89. X      dothrow.o eat.o end.o engrave.o exper.o extralev.o fountain.o getline.o\
  90. X***************
  91. X*** 387,393 ****
  92. X  polyself.o:  ../include/hack.h
  93. X  potion.o:  ../include/hack.h
  94. X  pray.o:  ../include/hack.h
  95. X! pri.o:  ../include/hack.h ../include/epri.h
  96. X  priest.o:  ../include/hack.h ../include/mfndpos.h ../include/eshk.h ../include/epri.h
  97. X  prisym.o:  ../include/hack.h ../include/wseg.h ../include/lev.h
  98. X  read.o:  ../include/hack.h
  99. X--- 387,393 ----
  100. X  polyself.o:  ../include/hack.h
  101. X  potion.o:  ../include/hack.h
  102. X  pray.o:  ../include/hack.h
  103. X! pri.o:  ../include/hack.h ../include/epri.h ../include/termcap.h
  104. X  priest.o:  ../include/hack.h ../include/mfndpos.h ../include/eshk.h ../include/epri.h
  105. X  prisym.o:  ../include/hack.h ../include/wseg.h ../include/lev.h
  106. X  read.o:  ../include/hack.h
  107. X***************
  108. X*** 404,410 ****
  109. X  sp_lev.o:  ../include/hack.h ../include/sp_lev.h
  110. X  spell.o:  ../include/hack.h
  111. X  steal.o:  ../include/hack.h
  112. X! termcap.o:  ../include/hack.h
  113. X  timeout.o:  ../include/hack.h
  114. X  topl.o:  ../include/hack.h
  115. X  topten.o:  ../include/hack.h
  116. X--- 404,410 ----
  117. X  sp_lev.o:  ../include/hack.h ../include/sp_lev.h
  118. X  spell.o:  ../include/hack.h
  119. X  steal.o:  ../include/hack.h
  120. X! termcap.o:  ../include/hack.h ../include/termcap.h
  121. X  timeout.o:  ../include/hack.h
  122. X  topl.o:  ../include/hack.h
  123. X  topten.o:  ../include/hack.h
  124. X***************
  125. X*** 428,437 ****
  126. X              touch ../include/config.h
  127. X  ../include/decl.h:  ../include/spell.h ../include/color.h ../include/obj.h ../include/you.h ../include/onames.h ../include/pm.h
  128. X              touch ../include/decl.h
  129. X! ../include/global.h:  ../include/coord.h ../include/vmsconf.h ../include/unixconf.h ../include/pcconf.h ../include/tosconf.h ../include/amiconf.h
  130. X              touch ../include/global.h
  131. X  ../include/hack.h:  ../include/config.h ../include/decl.h ../include/monsym.h ../include/mkroom.h ../include/objclass.h ../include/gold.h ../include/trap.h ../include/flag.h ../include/rm.h 
  132. X              touch ../include/hack.h
  133. X  ../include/pcconf.h:  ../include/msdos.h ../include/system.h
  134. X              touch ../include/pcconf.h
  135. X  ../include/permonst.h:  ../include/monattk.h ../include/monflag.h
  136. X--- 428,439 ----
  137. X              touch ../include/config.h
  138. X  ../include/decl.h:  ../include/spell.h ../include/color.h ../include/obj.h ../include/you.h ../include/onames.h ../include/pm.h
  139. X              touch ../include/decl.h
  140. X! ../include/global.h:  ../include/coord.h ../include/vmsconf.h ../include/unixconf.h ../include/pcconf.h ../include/tosconf.h ../include/amiconf.h ../include/macconf.h
  141. X              touch ../include/global.h
  142. X  ../include/hack.h:  ../include/config.h ../include/decl.h ../include/monsym.h ../include/mkroom.h ../include/objclass.h ../include/gold.h ../include/trap.h ../include/flag.h ../include/rm.h 
  143. X              touch ../include/hack.h
  144. X+ ../include/macconf.h:  ../include/msdos.h ../include/system.h 
  145. X+             touch ../include/macconf.h
  146. X  ../include/pcconf.h:  ../include/msdos.h ../include/system.h
  147. X              touch ../include/pcconf.h
  148. X  ../include/permonst.h:  ../include/monattk.h ../include/monflag.h
  149. X*** src/Old/allmain.c    Sun Nov 19 12:31:13 1989
  150. X--- src/allmain.c    Sat Nov  4 13:40:17 1989
  151. X***************
  152. X*** 42,47 ****
  153. X--- 42,50 ----
  154. X          UnloadSeg(savebones);
  155. X      }
  156. X  #endif
  157. X+ #ifdef CLIPPING
  158. X+         cliparound(u.ux, u.uy);
  159. X+ #endif
  160. X          if(flags.move) {    /* actual time passed */
  161. X  
  162. X  #ifdef SOUNDS
  163. X***************
  164. X*** 262,267 ****
  165. X--- 265,273 ----
  166. X       */
  167. X      if(MON_AT(u.ux, u.uy)) mnexto(m_at(u.ux, u.uy));
  168. X  
  169. X+ #ifdef CLIPPING
  170. X+     cliparound(u.ux, u.uy);
  171. X+ #endif
  172. X      (void) makedog();
  173. X      seemons();
  174. X  #ifdef NEWS
  175. X*** src/Old/alloc.c    Sun Nov 19 12:31:27 1989
  176. X--- src/alloc.c    Fri Nov 17 19:31:23 1989
  177. X***************
  178. X*** 1,4 ****
  179. X! /*    SCCS Id: @(#)alloc.c    3.0    88/07/21
  180. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  181. X  /* NetHack may be freely redistributed.  See license for details. */
  182. X  
  183. X--- 1,4 ----
  184. X! /*    SCCS Id: @(#)alloc.c    3.0    89/11/15
  185. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  186. X  /* NetHack may be freely redistributed.  See license for details. */
  187. X  
  188. X***************
  189. X*** 23,29 ****
  190. X  
  191. X  #else
  192. X  #ifndef __TURBOC__
  193. X! extern void panic P((char *,...));
  194. X  
  195. X  long *
  196. X  alloc(lth)
  197. X--- 23,29 ----
  198. X  
  199. X  #else
  200. X  #ifndef __TURBOC__
  201. X! extern void VDECL(panic, (char *,...));
  202. X  
  203. X  long *
  204. X  alloc(lth)
  205. X*** src/Old/apply.c    Sun Nov 19 12:31:42 1989
  206. X--- src/apply.c    Sat Nov 18 21:17:21 1989
  207. X***************
  208. X*** 95,102 ****
  209. X                  mtmp->mflee = 1;
  210. X                  if(rn2(4)) mtmp->mfleetim = rnd(100);
  211. X              }
  212. X!             if(tmp < 3) mtmp->mcansee  = mtmp->mblinded = 0;
  213. X!             else {
  214. X                  tmp2 = mtmp->mblinded;
  215. X                  tmp2 += rnd(1 + 50/tmp);
  216. X                  if(tmp2 > 127) tmp2 = 127;
  217. X--- 95,104 ----
  218. X                  mtmp->mflee = 1;
  219. X                  if(rn2(4)) mtmp->mfleetim = rnd(100);
  220. X              }
  221. X!             if(tmp < 3) {
  222. X!                 mtmp->mcansee  = 0;
  223. X!                 mtmp->mblinded = 0;
  224. X!             } else {
  225. X                  tmp2 = mtmp->mblinded;
  226. X                  tmp2 += rnd(1 + 50/tmp);
  227. X                  if(tmp2 > 127) tmp2 = 127;
  228. X***************
  229. X*** 415,422 ****
  230. X  }
  231. X  #endif /* WALKIES */
  232. X  
  233. X! 
  234. X! static int
  235. X  dig() {
  236. X      register struct rm *lev;
  237. X      register int dpx = dig_pos.x, dpy = dig_pos.y;
  238. X--- 417,426 ----
  239. X  }
  240. X  #endif /* WALKIES */
  241. X  
  242. X! #ifndef OVERLAY
  243. X! static 
  244. X! #endif
  245. X! int
  246. X  dig() {
  247. X      register struct rm *lev;
  248. X      register int dpx = dig_pos.x, dpy = dig_pos.y;
  249. X***************
  250. X*** 524,529 ****
  251. X--- 528,535 ----
  252. X          if(IS_DOOR(lev->typ) && (lev->doormask & D_TRAPPED)) {
  253. X              b_trapped("door");
  254. X              lev->doormask = D_NODOOR;
  255. X+             mnewsym(dpx, dpy);
  256. X+             prl(dpx, dpy);
  257. X          }
  258. X          dig_level = -1;
  259. X          return(0);
  260. X***************
  261. X*** 642,648 ****
  262. X  struct obj *obj;
  263. X  {
  264. X      char dirsyms[12];
  265. X!     register char *dsp = dirsyms, *sdp = flags.num_pad ? ndir : sdir;
  266. X      register struct rm *lev;
  267. X      register int rx, ry, res = 0;
  268. X      register boolean isclosedoor = FALSE;
  269. X--- 648,655 ----
  270. X  struct obj *obj;
  271. X  {
  272. X      char dirsyms[12];
  273. X!     register char *dsp = dirsyms;
  274. X!     register const char *sdp = flags.num_pad ? ndir : sdir;
  275. X      register struct rm *lev;
  276. X      register int rx, ry, res = 0;
  277. X      register boolean isclosedoor = FALSE;
  278. X***************
  279. X*** 779,795 ****
  280. X  #endif
  281. X                 if (Hallucination) You("look %s.", hcolor());
  282. X              else if (Sick)
  283. X!             You("look peakish.");
  284. X              else if (u.uhs >= WEAK)
  285. X              You("look undernourished.");
  286. X  #ifdef POLYSELF
  287. X              else if (u.usym == S_NYMPH
  288. X! #ifdef HARD
  289. X                   || u.umonnum==PM_SUCCUBUS
  290. X  #endif
  291. X                   )
  292. X              You("look beautiful in the mirror.");
  293. X! #ifdef HARD
  294. X              else if (u.umonnum == PM_INCUBUS)
  295. X              You("look handsome in the mirror.");
  296. X  #endif
  297. X--- 786,802 ----
  298. X  #endif
  299. X                 if (Hallucination) You("look %s.", hcolor());
  300. X              else if (Sick)
  301. X!             You("look peaked.");
  302. X              else if (u.uhs >= WEAK)
  303. X              You("look undernourished.");
  304. X  #ifdef POLYSELF
  305. X              else if (u.usym == S_NYMPH
  306. X! #ifdef INFERNO
  307. X                   || u.umonnum==PM_SUCCUBUS
  308. X  #endif
  309. X                   )
  310. X              You("look beautiful in the mirror.");
  311. X! #ifdef INFERNO
  312. X              else if (u.umonnum == PM_INCUBUS)
  313. X              You("look handsome in the mirror.");
  314. X  #endif
  315. X***************
  316. X*** 883,889 ****
  317. X              pline ("%s has confused itself!", Monnam(mtmp));
  318. X              mtmp->mconf = 1;
  319. X      } else if(!mtmp->mcan && !mtmp->minvis && (mlet == S_NYMPH
  320. X! #ifdef HARD
  321. X                || mtmp->data==&mons[PM_SUCCUBUS]
  322. X  #endif
  323. X                )) {
  324. X--- 890,896 ----
  325. X              pline ("%s has confused itself!", Monnam(mtmp));
  326. X              mtmp->mconf = 1;
  327. X      } else if(!mtmp->mcan && !mtmp->minvis && (mlet == S_NYMPH
  328. X! #ifdef INFERNO
  329. X                || mtmp->data==&mons[PM_SUCCUBUS]
  330. X  #endif
  331. X                )) {
  332. X***************
  333. X*** 1135,1141 ****
  334. X      can->blessed = obj->blessed;
  335. X      can = addinv(can);
  336. X      You("now have %s.", doname(can));
  337. X!     useup(corpse);
  338. X  }
  339. X  
  340. X  int
  341. X--- 1142,1223 ----
  342. X      can->blessed = obj->blessed;
  343. X      can = addinv(can);
  344. X      You("now have %s.", doname(can));
  345. X!     if (carried(corpse)) useup(corpse);
  346. X!     else useupf(corpse);
  347. X! }
  348. X! 
  349. X! int
  350. X! use_unicorn_horn(obj)
  351. X! struct obj *obj;
  352. X! {
  353. X!     boolean cursed = (obj && obj->cursed);
  354. X!     boolean blessed = (obj && obj->blessed);
  355. X!     boolean did_something = FALSE;
  356. X! 
  357. X!     if (cursed) {
  358. X!         switch (rn2(6)) {
  359. X!             static char buf[BUFSZ];
  360. X!             case 0: make_sick(Sick ? 1L : (long)(20 + rn2(20)), TRUE);
  361. X!                 Strcpy(buf, xname(obj));
  362. X!                 u.usick_cause = buf;
  363. X!                 break;
  364. X!             case 1: make_blinded(Blinded + (long) rnd(100), TRUE);
  365. X!                 break;
  366. X!             case 2: if (!Confusion)
  367. X!                 You("suddenly feel %s.",
  368. X!                     Hallucination ? "trippy" : "confused");
  369. X!                 make_confused(HConfusion + (long) rnd(100), TRUE);
  370. X!                 break;
  371. X!             case 3: make_stunned(HStun + (long) rnd(100), TRUE);
  372. X!                 break;
  373. X!             case 4: adjattrib(rn2(6), -1, FALSE);
  374. X!                 break;
  375. X!             case 5: make_hallucinated(Hallucination + (long) rnd(100),
  376. X!                 TRUE);
  377. X!                 break;
  378. X!         }
  379. X!         return 1;
  380. X!     }
  381. X!         
  382. X!     if (Sick) {
  383. X!         make_sick(0L, TRUE);
  384. X!         did_something++;
  385. X!     }
  386. X!     if (Blinded && (!did_something || blessed)) {
  387. X!         make_blinded(0L, TRUE);
  388. X!         did_something++;
  389. X!     }
  390. X!     if (Hallucination && (!did_something || blessed)) {
  391. X!         make_hallucinated(0L, TRUE);
  392. X!         did_something++;
  393. X!     }
  394. X!     if (HConfusion && (!did_something || blessed)) {
  395. X!         make_confused(0L, TRUE);
  396. X!         did_something++;
  397. X!     }
  398. X!     if (HStun && (!did_something || blessed)) {
  399. X!         make_stunned(0L, TRUE);
  400. X!         did_something++;
  401. X!     }
  402. X!     if (!did_something || blessed) {
  403. X!         register int j;
  404. X!         int did_stat = 0;
  405. X!         int i = rn2(A_MAX);
  406. X!         for(j=0; j<A_MAX; j++) {
  407. X!             if ((blessed || j==i) && ABASE(i) < AMAX(i)) {
  408. X!                 did_something++;
  409. X!                 /* They may have to use it several times... */
  410. X!                 if (!did_stat) {
  411. X!                     did_stat++;
  412. X!                     pline("This makes you feel good!");
  413. X!                 }
  414. X!                 ABASE(i)++;
  415. X!                 flags.botl = 1;
  416. X!             }
  417. X!         }
  418. X!     }
  419. X!     if (!did_something) pline(nothing_happens);
  420. X!     return !!did_something;
  421. X  }
  422. X  
  423. X  int
  424. X***************
  425. X*** 1244,1249 ****
  426. X--- 1326,1334 ----
  427. X          } 
  428. X          else if (!ublindf) Blindf_on(obj);
  429. X          else You("are already wearing a blindfold!");
  430. X+         break;
  431. X+     case UNICORN_HORN:
  432. X+         res = use_unicorn_horn(obj);
  433. X          break;
  434. X      default:
  435. X          pline("Sorry, I don't know how to use that.");
  436. X*** src/Old/artifact.c    Sun Nov 19 12:32:35 1989
  437. X--- src/artifact.c    Sun Oct 22 11:45:42 1989
  438. X***************
  439. X*** 101,107 ****
  440. X  mkartifact(otmp1)
  441. X  struct obj **otmp1;
  442. X  {
  443. X!     register struct artifact *artif;
  444. X      register struct obj *otmp = *otmp1;
  445. X      register int n = 0;
  446. X  
  447. X--- 101,107 ----
  448. X  mkartifact(otmp1)
  449. X  struct obj **otmp1;
  450. X  {
  451. X!     register const struct artifact *artif;
  452. X      register struct obj *otmp = *otmp1;
  453. X      register int n = 0;
  454. X  
  455. X***************
  456. X*** 123,135 ****
  457. X  get_artifact(otmp)
  458. X  struct obj *otmp;
  459. X  {
  460. X!     register struct artifact *artif;
  461. X  
  462. X      if(otmp)
  463. X          if(strlen(ONAME(otmp)))
  464. X          for(artif = artilist; artif->otyp; artif++)
  465. X              if(artif->otyp == otmp->otyp &&
  466. X!                !strcmp(ONAME(otmp), artif->name)) return(artif);
  467. X      return((struct artifact *)0);
  468. X  }
  469. X  
  470. X--- 123,136 ----
  471. X  get_artifact(otmp)
  472. X  struct obj *otmp;
  473. X  {
  474. X!     register const struct artifact *artif;
  475. X  
  476. X      if(otmp)
  477. X          if(strlen(ONAME(otmp)))
  478. X          for(artif = artilist; artif->otyp; artif++)
  479. X              if(artif->otyp == otmp->otyp &&
  480. X!                !strcmp(ONAME(otmp), artif->name))
  481. X!                 return((struct artifact *)artif);
  482. X      return((struct artifact *)0);
  483. X  }
  484. X  
  485. X***************
  486. X*** 155,161 ****
  487. X  register struct obj *otmp;
  488. X  register char    *name;
  489. X  {
  490. X!     register struct artifact *artif;
  491. X  
  492. X      if(!strlen(name)) return(0);
  493. X  
  494. X--- 156,162 ----
  495. X  register struct obj *otmp;
  496. X  register char    *name;
  497. X  {
  498. X!     register const struct artifact *artif;
  499. X  
  500. X      if(!strlen(name)) return(0);
  501. X  
  502. X***************
  503. X*** 172,178 ****
  504. X  mk_aligned_artifact(align)
  505. X  unsigned align;
  506. X  {
  507. X!     register struct artifact *artif;
  508. X      register struct obj *otmp;
  509. X      register int n = 0;
  510. X  
  511. X--- 173,179 ----
  512. X  mk_aligned_artifact(align)
  513. X  unsigned align;
  514. X  {
  515. X!     register const struct artifact *artif;
  516. X      register struct obj *otmp;
  517. X      register int n = 0;
  518. X  
  519. X*** src/Old/attrib.c    Sun Nov 19 12:32:55 1989
  520. X--- src/attrib.c    Wed Nov  8 21:19:20 1989
  521. X***************
  522. X*** 95,110 ****
  523. X   * a minimum strength of 6 since without one you can't teleport or cast
  524. X   * spells. --KAA
  525. X   */
  526. X!     struct    innate *abil;
  527. X! }    a_attr = { {     6,  9,  9,  6,  6,  6 },  /* Archeologist */
  528. X             {    20, 20, 20, 10, 20, 10 },
  529. X              10,  1, 13, 10, 14,  2, a_abil },
  530. X  
  531. X!     b_attr = { {    15,  6,  6, 14, 15,  5 },  /* Barbarian */
  532. X             {    30,  6,  7, 20, 30,  7 },
  533. X              10, -1, 16, 12, 10,  3, b_abil },
  534. X  
  535. X!     c_attr = { {     9,  6,  6,  6,  7,  5 },  /* Caveman (fighter) */
  536. X             {    30,  6,  7, 20, 30,  7 },
  537. X               0,  1, 16, 10, 10,  3, c_abil },
  538. X  
  539. X--- 95,110 ----
  540. X   * a minimum strength of 6 since without one you can't teleport or cast
  541. X   * spells. --KAA
  542. X   */
  543. X!     const struct    innate *abil;
  544. X! }    a_attr = { {     7, 10, 10,  7,  7,  7 },  /* Archeologist */
  545. X             {    20, 20, 20, 10, 20, 10 },
  546. X              10,  1, 13, 10, 14,  2, a_abil },
  547. X  
  548. X!     b_attr = { {    16,  7,  7, 15, 16,  6 },  /* Barbarian */
  549. X             {    30,  6,  7, 20, 30,  7 },
  550. X              10, -1, 16, 12, 10,  3, b_abil },
  551. X  
  552. X!     c_attr = { {    10,  7,  7,  7,  8,  6 },  /* Caveman (fighter) */
  553. X             {    30,  6,  7, 20, 30,  7 },
  554. X               0,  1, 16, 10, 10,  3, c_abil },
  555. X  
  556. X***************
  557. X*** 111,149 ****
  558. X  /*
  559. X      e_attr = { {    13, 13, 14,  6, 14,  6 },
  560. X   */
  561. X!     e_attr = { {    12, 12, 12,  8, 12,  6 },  /* Elf (ranger) */
  562. X             {    30, 10, 10, 20, 20, 10 },
  563. X              10,  1, 15, 10, 11,  2, e_abil },
  564. X  
  565. X!     h_attr = { {     6,  6, 12,  6, 10, 15 },  /* Healer (druid) */
  566. X             {    15, 20, 20, 15, 25, 10 },
  567. X              10,  1, 13, 10, 20,  2, h_abil },
  568. X  
  569. X!     k_attr = { {    12,  6, 13,  6,  9, 17 },  /* Knight (paladin) */
  570. X             {    20, 15, 15, 10, 20, 10 },
  571. X              10,  1, 16, 10, 10,  3, k_abil },
  572. X  
  573. X!     p_attr = { {     6,  6,  9,  6,  6,  6 },  /* Priest (cleric) */
  574. X             {    15, 10, 30, 15, 20, 10 },
  575. X               0,  0, 14, 10, 10,  2, p_abil },
  576. X  
  577. X!     r_attr = { {     6,  6,  6,  9,  6,  5 },  /* Rogue (thief) */
  578. X             {    20, 10, 10, 30, 20, 10 },
  579. X              10, -1, 12, 10, 11,  2, r_abil },
  580. X  
  581. X!     s_attr = { {     9,  6,  6,  9, 17,  5 },  /* Samurai (fighter/thief) */
  582. X             {    30, 10, 10, 30, 14, 10 },
  583. X              10,  1, 15, 10, 11,  2, s_abil },
  584. X  
  585. X!     t_attr = { {     6,  9,  5,  6,  6,  9 },  /* Tourist */
  586. X             {    15, 10, 10, 15, 30, 20 },
  587. X               0,  0, 10, 10, 14,  1, t_abil },
  588. X  
  589. X!     v_attr = { {     9,  6,  6,  6,  9,  6 },  /* Valkyrie (fighter) */
  590. X             {    30,  6,  7, 20, 30,  7 },
  591. X               0, -1, 16, 10, 10,  3, v_abil },
  592. X  
  593. X!     w_attr = { {     6,  9,  6,  6,  6,  6 },  /* Wizard (magic-user) */
  594. X             {    10, 30, 10, 20, 20, 10 },
  595. X               0,  0, 12, 10, 12,  1, w_abil },
  596. X  
  597. X--- 111,149 ----
  598. X  /*
  599. X      e_attr = { {    13, 13, 14,  6, 14,  6 },
  600. X   */
  601. X!     e_attr = { {    13, 13, 13,  9, 13,  7 },  /* Elf (ranger) */
  602. X             {    30, 10, 10, 20, 20, 10 },
  603. X              10,  1, 15, 10, 11,  2, e_abil },
  604. X  
  605. X!     h_attr = { {     7,  7, 13,  7, 11, 16 },  /* Healer (druid) */
  606. X             {    15, 20, 20, 15, 25, 10 },
  607. X              10,  1, 13, 10, 20,  2, h_abil },
  608. X  
  609. X!     k_attr = { {    13,  7, 14,  8, 10, 17 },  /* Knight (paladin) */
  610. X             {    20, 15, 15, 10, 20, 10 },
  611. X              10,  1, 16, 10, 10,  3, k_abil },
  612. X  
  613. X!     p_attr = { {     7,  7, 10,  7,  7,  7 },  /* Priest (cleric) */
  614. X             {    15, 10, 30, 15, 20, 10 },
  615. X               0,  0, 14, 10, 10,  2, p_abil },
  616. X  
  617. X!     r_attr = { {     7,  7,  7, 10,  7,  6 },  /* Rogue (thief) */
  618. X             {    20, 10, 10, 30, 20, 10 },
  619. X              10, -1, 12, 10, 11,  2, r_abil },
  620. X  
  621. X!     s_attr = { {    10,  8,  7, 10, 17,  6 },  /* Samurai (fighter/thief) */
  622. X             {    30, 10, 10, 30, 14, 10 },
  623. X              10,  1, 15, 10, 11,  2, s_abil },
  624. X  
  625. X!     t_attr = { {     7, 10,  6,  7,  7, 10 },  /* Tourist */
  626. X             {    15, 10, 10, 15, 30, 20 },
  627. X               0,  0, 10, 10, 14,  1, t_abil },
  628. X  
  629. X!     v_attr = { {    10,  7,  7,  7, 10,  7 },  /* Valkyrie (fighter) */
  630. X             {    30,  6,  7, 20, 30,  7 },
  631. X               0, -1, 16, 10, 10,  3, v_abil },
  632. X  
  633. X!     w_attr = { {     7, 10,  7,  7,  7,  7 },  /* Wizard (magic-user) */
  634. X             {    10, 30, 10, 20, 20, 10 },
  635. X               0,  0, 12, 10, 12,  1, w_abil },
  636. X  
  637. X***************
  638. X*** 277,286 ****
  639. X      }
  640. X  }
  641. X  
  642. X! static struct    clattr *
  643. X  clx()  {
  644. X  
  645. X!     register struct    clattr    *attr;
  646. X  
  647. X      switch    (pl_character[0]) {
  648. X  
  649. X--- 277,286 ----
  650. X      }
  651. X  }
  652. X  
  653. X! static const struct    clattr *
  654. X  clx()  {
  655. X  
  656. X!     register const struct    clattr    *attr;
  657. X  
  658. X      switch    (pl_character[0]) {
  659. X  
  660. X***************
  661. X*** 318,324 ****
  662. X  static void
  663. X  init_align() {    /* called from newhp if u.ulevel is 0 */
  664. X  
  665. X!     register struct    clattr    *attr = clx();
  666. X  
  667. X      u.ualign = (int)attr->align;
  668. X      u.ualigntyp = attr->aligntyp;
  669. X--- 318,324 ----
  670. X  static void
  671. X  init_align() {    /* called from newhp if u.ulevel is 0 */
  672. X  
  673. X!     register const struct    clattr    *attr = clx();
  674. X  
  675. X      u.ualign = (int)attr->align;
  676. X      u.ualigntyp = attr->aligntyp;
  677. X***************
  678. X*** 329,335 ****
  679. X      register int    np;
  680. X  {
  681. X      register int    i, x, tryct;
  682. X!     register struct    clattr    *attr = clx();
  683. X  
  684. X      for(i = 0; i < A_MAX; i++) {
  685. X  
  686. X--- 329,335 ----
  687. X      register int    np;
  688. X  {
  689. X      register int    i, x, tryct;
  690. X!     register const struct    clattr    *attr = clx();
  691. X  
  692. X      for(i = 0; i < A_MAX; i++) {
  693. X  
  694. X***************
  695. X*** 398,405 ****
  696. X  
  697. X      int    flag;        /* +ve/-ve  = gain/lose */
  698. X  {
  699. X!     register struct    clattr    *attr = clx();
  700. X!     register struct innate    *abil = attr->abil;
  701. X  
  702. X      if(abil) {
  703. X  
  704. X--- 398,405 ----
  705. X  
  706. X      int    flag;        /* +ve/-ve  = gain/lose */
  707. X  {
  708. X!     register const struct clattr    *attr = clx();
  709. X!     register const struct innate    *abil = attr->abil;
  710. X  
  711. X      if(abil) {
  712. X  
  713. X***************
  714. X*** 428,434 ****
  715. X  
  716. X  int
  717. X  newhp() {
  718. X!     register struct    clattr    *attr = clx();
  719. X      int    hp, conplus;
  720. X  
  721. X      if(u.ulevel == 0) {
  722. X--- 428,434 ----
  723. X  
  724. X  int
  725. X  newhp() {
  726. X!     register const struct clattr    *attr = clx();
  727. X      int    hp, conplus;
  728. X  
  729. X      if(u.ulevel == 0) {
  730. X*** src/Old/bones.c    Sun Nov 19 12:33:21 1989
  731. X--- src/bones.c    Tue Oct 31 11:04:23 1989
  732. X***************
  733. X*** 71,76 ****
  734. X--- 71,112 ----
  735. X  }
  736. X  #endif
  737. X  
  738. X+ void
  739. X+ resetobjs(ochain)
  740. X+ struct obj *ochain;
  741. X+ {
  742. X+     struct obj *otmp;
  743. X+ 
  744. X+     for (otmp = ochain; otmp; otmp = otmp->nobj) {
  745. X+         otmp->o_id = 0;
  746. X+         if (((otmp->otyp != CORPSE && otmp->otyp != STATUE)
  747. X+                    || otmp->corpsenm < PM_ARCHEOLOGIST)
  748. X+ #ifdef NAMED_ITEMS
  749. X+             && !is_artifact(otmp)
  750. X+ #endif
  751. X+         )
  752. X+         otmp->onamelth = 0;
  753. X+         if(objects[otmp->otyp].oc_uses_known) otmp->known = 0;
  754. X+ #ifdef TUTTI_FRUTTI
  755. X+         if(otmp->otyp == SLIME_MOLD) goodfruit(otmp->spe);
  756. X+ #endif
  757. X+         otmp->dknown = otmp->bknown = 0;
  758. X+         otmp->invlet = 0;
  759. X+ #ifdef MAIL
  760. X+         if (otmp->otyp == SCR_MAIL)
  761. X+             otmp->spe = 1;
  762. X+ #endif
  763. X+ #ifdef POLYSELF
  764. X+         if (otmp->otyp == EGG)
  765. X+             otmp->spe = 0;
  766. X+ #endif
  767. X+         if(otmp->otyp == AMULET_OF_YENDOR && !otmp->spe) {
  768. X+             otmp->spe = -1;      /* no longer the actual amulet */
  769. X+             curse(otmp);
  770. X+         }
  771. X+     }            
  772. X+ }
  773. X+ 
  774. X  /* save bones and possessions of a deceased adventurer */
  775. X  void
  776. X  savebones(){
  777. X***************
  778. X*** 166,174 ****
  779. X          Strcpy(NAME(mtmp), plname);
  780. X          mtmp->mnamelth = strlen(plname);
  781. X          atl(u.ux, u.uy, mtmp->data->mlet);
  782. X!         Your("body rises from the dead as a%s %s...",
  783. X!             index(vowels, *(mons[u.ugrave_arise].mname)) ? "n" : "",
  784. X!             mons[u.ugrave_arise].mname);
  785. X      }
  786. X      mtmp->m_lev = (u.ulevel ? u.ulevel : 1);
  787. X      mtmp->mhp = mtmp->mhpmax = u.uhpmax;
  788. X--- 202,209 ----
  789. X          Strcpy(NAME(mtmp), plname);
  790. X          mtmp->mnamelth = strlen(plname);
  791. X          atl(u.ux, u.uy, mtmp->data->mlet);
  792. X!         Your("body rises from the dead as %s...",
  793. X!             an(mons[u.ugrave_arise].mname));
  794. X      }
  795. X      mtmp->m_lev = (u.ulevel ? u.ulevel : 1);
  796. X      mtmp->mhp = mtmp->mhpmax = u.uhpmax;
  797. X***************
  798. X*** 175,191 ****
  799. X      mtmp->msleep = 1;
  800. X      if(u.ugold) mkgold(u.ugold, u.ux, u.uy);
  801. X      for(mtmp = fmon; mtmp; mtmp = mtmp->nmon){
  802. X!         for(otmp = mtmp->minvent; otmp; otmp = otmp->nobj) {
  803. X!             otmp->dknown = otmp->bknown = 0;
  804. X! #ifdef TUTTI_FRUTTI
  805. X!             if(otmp->otyp == SLIME_MOLD) goodfruit(otmp->spe);
  806. X! #endif
  807. X!             if(objects[otmp->otyp].oc_uses_known) otmp->known = 0;
  808. X!             if(otmp->otyp == AMULET_OF_YENDOR && !otmp->spe) {
  809. X!             otmp->spe = -1;  /* no longer the actual amulet */
  810. X!             curse(otmp);
  811. X!             }
  812. X!         }
  813. X          mtmp->m_id = 0;
  814. X          mtmp->mlstmv = 0L;
  815. X          if(mtmp->mtame) mtmp->mtame = mtmp->mpeaceful = 0;
  816. X--- 210,216 ----
  817. X      mtmp->msleep = 1;
  818. X      if(u.ugold) mkgold(u.ugold, u.ux, u.uy);
  819. X      for(mtmp = fmon; mtmp; mtmp = mtmp->nmon){
  820. X!         resetobjs(mtmp->minvent);
  821. X          mtmp->m_id = 0;
  822. X          mtmp->mlstmv = 0L;
  823. X          if(mtmp->mtame) mtmp->mtame = mtmp->mpeaceful = 0;
  824. X***************
  825. X*** 194,228 ****
  826. X      for(ttmp = ftrap; ttmp; ttmp = ttmp->ntrap)
  827. X          ttmp->tseen = 0;
  828. X  
  829. X!     for(otmp = fobj; otmp; otmp = otmp->nobj)  {
  830. X! 
  831. X!         otmp->o_id = 0;
  832. X!         if (((otmp->otyp != CORPSE && otmp->otyp != STATUE)
  833. X!                 || otmp->corpsenm < PM_ARCHEOLOGIST)
  834. X! #ifdef NAMED_ITEMS
  835. X!                 && !is_artifact(otmp)
  836. X! #endif
  837. X!            )
  838. X!             otmp->onamelth = 0;
  839. X!         if(objects[otmp->otyp].oc_uses_known) otmp->known = 0;
  840. X! #ifdef TUTTI_FRUTTI
  841. X!         if(otmp->otyp == SLIME_MOLD) goodfruit(otmp->spe);
  842. X! #endif
  843. X!         otmp->dknown = otmp->bknown = 0;
  844. X!         otmp->invlet = 0;
  845. X! #ifdef MAIL
  846. X!         if (otmp->otyp == SCR_MAIL)
  847. X!             otmp->spe = 1;
  848. X! #endif
  849. X! #ifdef POLYSELF
  850. X!         if (otmp->otyp == EGG)
  851. X!             otmp->spe = 0;
  852. X! #endif
  853. X!         if(otmp->otyp == AMULET_OF_YENDOR && !otmp->spe) {
  854. X!             otmp->spe = -1;      /* no longer the actual amulet */
  855. X!             curse(otmp);
  856. X!         }
  857. X!     }
  858. X  
  859. X      for(x=0; x<COLNO; x++) for(y=0; y<ROWNO; y++)
  860. X          levl[x][y].seen = levl[x][y].new = levl[x][y].scrsym = 0;
  861. X--- 219,226 ----
  862. X      for(ttmp = ftrap; ttmp; ttmp = ttmp->ntrap)
  863. X          ttmp->tseen = 0;
  864. X  
  865. X!     resetobjs(fobj);
  866. X!     resetobjs(fcobj);   /* let's (not) forget about these - KCD, 10/21/89 */
  867. X  
  868. X      for(x=0; x<COLNO; x++) for(y=0; y<ROWNO; y++)
  869. X          levl[x][y].seen = levl[x][y].new = levl[x][y].scrsym = 0;
  870. X***************
  871. X*** 242,248 ****
  872. X          (void)GetVol(&fileName,&oldvolume);
  873. X          (void)SetVol(0L, t->system.sysVRefNum);
  874. X          fileName[0] = (uchar)strlen(bones);
  875. X!         (void)strcpy((char *)&fileName[1],bones);
  876. X          
  877. X          if (er = Create(&fileName,0,CREATOR,BONES_TYPE))
  878. X              SysBeep(1);
  879. X--- 240,246 ----
  880. X          (void)GetVol(&fileName,&oldvolume);
  881. X          (void)SetVol(0L, t->system.sysVRefNum);
  882. X          fileName[0] = (uchar)strlen(bones);
  883. X!         Strcpy((char *)&fileName[1],bones);
  884. X          
  885. X          if (er = Create(&fileName,0,CREATOR,BONES_TYPE))
  886. X              SysBeep(1);
  887. X*** src/Old/cmd.c    Sun Nov 19 12:33:50 1989
  888. X--- src/cmd.c    Fri Nov 17 19:31:26 1989
  889. X***************
  890. X*** 1,4 ****
  891. X! /*    SCCS Id: @(#)cmd.c    3.0    88/10/24
  892. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  893. X  /* NetHack may be freely redistributed.  See license for details. */
  894. X  
  895. X--- 1,4 ----
  896. X! /*    SCCS Id: @(#)cmd.c    3.0    89/11/15
  897. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  898. X  /* NetHack may be freely redistributed.  See license for details. */
  899. X  
  900. X***************
  901. X*** 61,67 ****
  902. X  extern int dosave(); /**/
  903. X  extern int dosave0(); /**/
  904. X  extern int dosearch(); /**/
  905. X! extern int dosearch0 P((int)); /**/
  906. X  extern int doidtrap(); /**/
  907. X  extern int dopay(); /**/
  908. X  extern int dosit(); /**/
  909. X--- 61,67 ----
  910. X  extern int dosave(); /**/
  911. X  extern int dosave0(); /**/
  912. X  extern int dosearch(); /**/
  913. X! extern int FDECL(dosearch0, (int)); /**/
  914. X  extern int doidtrap(); /**/
  915. X  extern int dopay(); /**/
  916. X  extern int dosit(); /**/
  917. X***************
  918. X*** 76,88 ****
  919. X  extern int dozap(); /**/
  920. X  #endif /* DUMB */
  921. X  
  922. X! static int (*timed_occ_fn)();
  923. X  #ifdef POLYSELF
  924. X! static int domonability();
  925. X  #endif
  926. X  
  927. X  /* Count down by decrementing multi */
  928. X! static int
  929. X  timed_occupation() {
  930. X      (*timed_occ_fn)();
  931. X      if (multi > 0)
  932. X--- 76,97 ----
  933. X  extern int dozap(); /**/
  934. X  #endif /* DUMB */
  935. X  
  936. X! #ifndef OVERLAY
  937. X! static 
  938. X! #endif
  939. X! int (*timed_occ_fn)();
  940. X  #ifdef POLYSELF
  941. X! #ifndef OVERLAY
  942. X! static 
  943. X! #endif
  944. X! int domonability();
  945. X  #endif
  946. X  
  947. X  /* Count down by decrementing multi */
  948. X! #ifndef OVERLAY
  949. X! static 
  950. X! #endif
  951. X! int
  952. X  timed_occupation() {
  953. X      (*timed_occ_fn)();
  954. X      if (multi > 0)
  955. X***************
  956. X*** 173,179 ****
  957. X      return;
  958. X  }
  959. X  
  960. X! /* A ch == 0 resets the saveq.  Only save keystrokes when not
  961. X   * replaying a previous command.
  962. X   */
  963. X  void
  964. X--- 182,188 ----
  965. X      return;
  966. X  }
  967. X  
  968. X! /* A ch == 0 resets the saveq.    Only save keystrokes when not
  969. X   * replaying a previous command.
  970. X   */
  971. X  void
  972. X***************
  973. X*** 190,200 ****
  974. X  }
  975. X  #endif /* REDO */
  976. X  
  977. X! static int
  978. X  doextcmd()    /* here after # - now read a full-word command */
  979. X  {
  980. X      char buf[BUFSZ];
  981. X!     register struct ext_func_tab *efp = extcmdlist;
  982. X  again:
  983. X      pline("# ");
  984. X  #ifdef COM_COMPL
  985. X--- 199,212 ----
  986. X  }
  987. X  #endif /* REDO */
  988. X  
  989. X! #ifndef OVERLAY
  990. X! static 
  991. X! #endif
  992. X! int
  993. X  doextcmd()    /* here after # - now read a full-word command */
  994. X  {
  995. X      char buf[BUFSZ];
  996. X!     register const struct ext_func_tab *efp = extcmdlist;
  997. X  again:
  998. X      pline("# ");
  999. X  #ifdef COM_COMPL
  1000. X***************
  1001. X*** 221,228 ****
  1002. X  int
  1003. X  doextlist()    /* here after #? - now list all full-word commands */
  1004. X  {
  1005. X!     register struct ext_func_tab *efp = extcmdlist;
  1006. X!     char     buf[BUFSZ];
  1007. X  
  1008. X      set_pager(0);
  1009. X      if(page_line("") ||
  1010. X--- 233,240 ----
  1011. X  int
  1012. X  doextlist()    /* here after #? - now list all full-word commands */
  1013. X  {
  1014. X!     register const struct ext_func_tab *efp = extcmdlist;
  1015. X!     char     buf[BUFSZ];
  1016. X  
  1017. X      set_pager(0);
  1018. X      if(page_line("") ||
  1019. X***************
  1020. X*** 229,235 ****
  1021. X         page_line("            Extended Commands List") ||
  1022. X         page_line("") ||
  1023. X         page_line("    Press '#', then type (first letter only):") ||
  1024. X!        page_line(""))                     goto quit;
  1025. X  
  1026. X      while(efp->ef_txt) {
  1027. X  
  1028. X--- 241,247 ----
  1029. X         page_line("            Extended Commands List") ||
  1030. X         page_line("") ||
  1031. X         page_line("    Press '#', then type (first letter only):") ||
  1032. X!        page_line(""))                                        goto quit;
  1033. X  
  1034. X      while(efp->ef_txt) {
  1035. X  
  1036. X***************
  1037. X*** 245,251 ****
  1038. X  }
  1039. X  
  1040. X  #ifdef POLYSELF
  1041. X! static int
  1042. X  domonability()
  1043. X  {
  1044. X      if (can_breathe(uasmon)) return dobreathe();
  1045. X--- 257,266 ----
  1046. X  }
  1047. X  
  1048. X  #ifdef POLYSELF
  1049. X! #ifndef OVERLAY
  1050. X! static 
  1051. X! #endif
  1052. X! int
  1053. X  domonability()
  1054. X  {
  1055. X      if (can_breathe(uasmon)) return dobreathe();
  1056. X***************
  1057. X*** 255,260 ****
  1058. X--- 270,276 ----
  1059. X      else if (is_were(uasmon)) return dosummon();
  1060. X      else if (webmaker(uasmon)) return dospinweb();
  1061. X      else if (is_hider(uasmon)) return dohide();
  1062. X+     else if (u.usym == S_UNICORN) return use_unicorn_horn((struct obj *)0);
  1063. X      else if (u.umonnum >= 0)
  1064. X          pline("Any special ability you may have is purely reflexive.");
  1065. X      else You("don't have a special ability!");
  1066. X***************
  1067. X*** 263,269 ****
  1068. X  #endif
  1069. X  
  1070. X  #ifdef WIZARD
  1071. X! static int
  1072. X  wiz_wish()    /* Unlimited wishes for wizard mode by Paul Polderman */
  1073. X  {
  1074. X      if (wizard)    makewish();
  1075. X--- 279,288 ----
  1076. X  #endif
  1077. X  
  1078. X  #ifdef WIZARD
  1079. X! #ifndef OVERLAY
  1080. X! static 
  1081. X! #endif
  1082. X! int
  1083. X  wiz_wish()    /* Unlimited wishes for wizard mode by Paul Polderman */
  1084. X  {
  1085. X      if (wizard)    makewish();
  1086. X***************
  1087. X*** 271,277 ****
  1088. X      return 0;
  1089. X  }
  1090. X  
  1091. X! static int
  1092. X  wiz_identify()
  1093. X  {
  1094. X      struct obj *obj;
  1095. X--- 290,299 ----
  1096. X      return 0;
  1097. X  }
  1098. X  
  1099. X! #ifndef OVERLAY
  1100. X! static 
  1101. X! #endif
  1102. X! int
  1103. X  wiz_identify()
  1104. X  {
  1105. X      struct obj *obj;
  1106. X***************
  1107. X*** 287,293 ****
  1108. X      return 0;
  1109. X  }
  1110. X  
  1111. X! static int
  1112. X  wiz_map()
  1113. X  {
  1114. X      if (wizard)    do_mapping();
  1115. X--- 309,318 ----
  1116. X      return 0;
  1117. X  }
  1118. X  
  1119. X! #ifndef OVERLAY
  1120. X! static 
  1121. X! #endif
  1122. X! int
  1123. X  wiz_map()
  1124. X  {
  1125. X      if (wizard)    do_mapping();
  1126. X***************
  1127. X*** 295,301 ****
  1128. X      return 0;
  1129. X  }
  1130. X  
  1131. X! static int
  1132. X  wiz_genesis()
  1133. X  {
  1134. X      if (wizard)    (void) create_particular();
  1135. X--- 320,329 ----
  1136. X      return 0;
  1137. X  }
  1138. X  
  1139. X! #ifndef OVERLAY
  1140. X! static 
  1141. X! #endif
  1142. X! int
  1143. X  wiz_genesis()
  1144. X  {
  1145. X      if (wizard)    (void) create_particular();
  1146. X***************
  1147. X*** 303,309 ****
  1148. X      return 0;
  1149. X  }
  1150. X  
  1151. X! static int
  1152. X  wiz_where()
  1153. X  {
  1154. X      if (wizard) {
  1155. X--- 331,340 ----
  1156. X      return 0;
  1157. X  }
  1158. X  
  1159. X! #ifndef OVERLAY
  1160. X! static 
  1161. X! #endif
  1162. X! int
  1163. X  wiz_where()
  1164. X  {
  1165. X      if (wizard) {
  1166. X***************
  1167. X*** 310,316 ****
  1168. X          pline("Medusa:%d  Wiz:%d  Big:%d", medusa_level, wiz_level, bigroom_level);
  1169. X  #ifdef STRONGHOLD
  1170. X  #  ifdef MUSIC
  1171. X!         pline("Castle:%d (tune %s)  Tower:%d-%d", 
  1172. X                stronghold_level, tune, tower_level, tower_level+2);
  1173. X  #  else
  1174. X          pline("Castle:%d  Tower:%d-%d",
  1175. X--- 341,347 ----
  1176. X          pline("Medusa:%d  Wiz:%d  Big:%d", medusa_level, wiz_level, bigroom_level);
  1177. X  #ifdef STRONGHOLD
  1178. X  #  ifdef MUSIC
  1179. X!         pline("Castle:%d (tune %s)  Tower:%d-%d",
  1180. X                stronghold_level, tune, tower_level, tower_level+2);
  1181. X  #  else
  1182. X          pline("Castle:%d  Tower:%d-%d",
  1183. X***************
  1184. X*** 328,334 ****
  1185. X      return 0;
  1186. X  }
  1187. X  
  1188. X! static int
  1189. X  wiz_detect()
  1190. X  {
  1191. X      if(wizard)  (void) findit();
  1192. X--- 359,368 ----
  1193. X      return 0;
  1194. X  }
  1195. X  
  1196. X! #ifndef OVERLAY
  1197. X! static 
  1198. X! #endif
  1199. X! int
  1200. X  wiz_detect()
  1201. X  {
  1202. X      if(wizard)  (void) findit();
  1203. X***************
  1204. X*** 336,342 ****
  1205. X      return 0;
  1206. X  }
  1207. X  
  1208. X! static int
  1209. X  wiz_level_tele()
  1210. X  {
  1211. X      if (wizard)    level_tele();
  1212. X--- 370,379 ----
  1213. X      return 0;
  1214. X  }
  1215. X  
  1216. X! #ifndef OVERLAY
  1217. X! static 
  1218. X! #endif
  1219. X! int
  1220. X  wiz_level_tele()
  1221. X  {
  1222. X      if (wizard)    level_tele();
  1223. X***************
  1224. X*** 435,441 ****
  1225. X  }
  1226. X  
  1227. X  #if defined(WIZARD) || defined(EXPLORE_MODE)
  1228. X! static int
  1229. X  wiz_attributes()
  1230. X  {
  1231. X      if (wizard || discover)
  1232. X--- 472,481 ----
  1233. X  }
  1234. X  
  1235. X  #if defined(WIZARD) || defined(EXPLORE_MODE)
  1236. X! #ifndef OVERLAY
  1237. X! static 
  1238. X! #endif
  1239. X! int
  1240. X  wiz_attributes()
  1241. X  {
  1242. X      if (wizard || discover)
  1243. X***************
  1244. X*** 446,453 ****
  1245. X--- 486,497 ----
  1246. X  }
  1247. X  #endif /* WIZARD || EXPLORE_MODE */
  1248. X  
  1249. X+ #ifndef M
  1250. X  #define M(c)        (0x80 | (c))
  1251. X+ #endif
  1252. X+ #ifndef C
  1253. X  #define C(c)        (0x1f & (c))
  1254. X+ #endif
  1255. X  const struct func_tab cmdlist[]={
  1256. X      {C('d'), dokick},    /* "D" is for door!...? */
  1257. X  #ifdef WIZARD
  1258. X***************
  1259. X*** 616,622 ****
  1260. X  rhack(cmd)
  1261. X  register char *cmd;
  1262. X  {
  1263. X!     register struct func_tab *tlist = cmdlist;
  1264. X      boolean firsttime = FALSE;
  1265. X      register int res;
  1266. X  
  1267. X--- 660,666 ----
  1268. X  rhack(cmd)
  1269. X  register char *cmd;
  1270. X  {
  1271. X!     register const struct func_tab *tlist = cmdlist;
  1272. X      boolean firsttime = FALSE;
  1273. X      register int res;
  1274. X  
  1275. X***************
  1276. X*** 766,772 ****
  1277. X  movecmd(sym)    /* also sets u.dz, but returns false for <> */
  1278. X  char sym;
  1279. X  {
  1280. X!     register char *dp, *sdp = flags.num_pad ? ndir : sdir;
  1281. X  
  1282. X      u.dz = 0;
  1283. X      if(!(dp = index(sdp, sym))) return 0;
  1284. X--- 810,817 ----
  1285. X  movecmd(sym)    /* also sets u.dz, but returns false for <> */
  1286. X  char sym;
  1287. X  {
  1288. X!     register char *dp;
  1289. X!     register const char *sdp = flags.num_pad ? ndir : sdir;
  1290. X  
  1291. X      u.dz = 0;
  1292. X      if(!(dp = index(sdp, sym))) return 0;
  1293. X***************
  1294. X*** 773,778 ****
  1295. X--- 818,829 ----
  1296. X      u.dx = xdir[dp-sdp];
  1297. X      u.dy = ydir[dp-sdp];
  1298. X      u.dz = zdir[dp-sdp];
  1299. X+ #ifdef POLYSELF
  1300. X+     if (u.dx && u.dy && u.umonnum == PM_GRID_BUG) {
  1301. X+         u.dx = u.dy = 0;
  1302. X+         return 0;
  1303. X+     }
  1304. X+ #endif
  1305. X      return !u.dz;
  1306. X  }
  1307. X  
  1308. X***************
  1309. X*** 804,810 ****
  1310. X  void
  1311. X  confdir()
  1312. X  {
  1313. X!     register int x = rn2(8);
  1314. X      u.dx = xdir[x];
  1315. X      u.dy = ydir[x];
  1316. X      return;
  1317. X--- 855,865 ----
  1318. X  void
  1319. X  confdir()
  1320. X  {
  1321. X!     register int x = 
  1322. X! #ifdef POLYSELF
  1323. X!         (u.umonnum == PM_GRID_BUG) ? 2*rn2(4) :
  1324. X! #endif
  1325. X!                             rn2(8);
  1326. X      u.dx = xdir[x];
  1327. X      u.dy = ydir[x];
  1328. X      return;
  1329. X*** src/Old/decl.c    Sun Nov 19 12:35:05 1989
  1330. X--- src/decl.c    Sat Nov  4 13:40:18 1989
  1331. X***************
  1332. X*** 81,86 ****
  1333. X--- 81,91 ----
  1334. X  #endif
  1335. X  int CO = 0, LI = 0;    /* set up in termcap.c: usually COLNO and ROWNO+3 */
  1336. X  
  1337. X+ #ifdef CLIPPING
  1338. X+ boolean clipping;    /* clipping on? */
  1339. X+ int clipx, clipy, clipxmax, clipymax;
  1340. X+ #endif
  1341. X+ 
  1342. X  #ifdef TEXTCOLOR
  1343. X  char *hilites[MAXCOLORS];    /* terminal escapes for the various colors */
  1344. X  #endif
  1345. X***************
  1346. X*** 155,161 ****
  1347. X      *uarmc = 0, *uarmh = 0, *uarms = 0, *uarmg = 0, *uarmf = 0, *uamul = 0,
  1348. X      *uright = 0, *uleft = 0, *ublindf = 0, *uchain = 0, *uball = 0;
  1349. X  
  1350. X! const struct symbols defsyms = {
  1351. X      ' ', /* stone */
  1352. X      '|', /* vwall */
  1353. X      '-', /* hwall */
  1354. X--- 160,166 ----
  1355. X      *uarmc = 0, *uarmh = 0, *uarms = 0, *uarmg = 0, *uarmf = 0, *uamul = 0,
  1356. X      *uright = 0, *uleft = 0, *ublindf = 0, *uchain = 0, *uball = 0;
  1357. X  
  1358. X! symbol_array defsyms = {
  1359. X      ' ', /* stone */
  1360. X      '|', /* vwall */
  1361. X      '-', /* hwall */
  1362. X***************
  1363. X*** 172,178 ****
  1364. X      '-', /* hbeam */
  1365. X      '\\', /* lslant */
  1366. X      '/', /* rslant */
  1367. X!     '+', /* door */
  1368. X      '.', /* room */
  1369. X      '#', /* corr */
  1370. X      '<', /* upstair */
  1371. X--- 177,186 ----
  1372. X      '-', /* hbeam */
  1373. X      '\\', /* lslant */
  1374. X      '/', /* rslant */
  1375. X!     '.', /* ndoor */
  1376. X!     '-', /* vodoor */
  1377. X!     '|', /* hodoor */
  1378. X!     '+', /* cdoor */
  1379. X      '.', /* room */
  1380. X      '#', /* corr */
  1381. X      '<', /* upstair */
  1382. X***************
  1383. X*** 189,198 ****
  1384. X      '#', /* dbvwall */    /* used ifdef STRONGHOLD */
  1385. X      '#', /* dbhwall */    /* used ifdef STRONGHOLD */
  1386. X  };
  1387. X! struct symbols showsyms = DUMMY; /* will contain the symbols actually used */
  1388. X  #ifdef REINCARNATION
  1389. X! struct symbols savesyms = DUMMY;
  1390. X  #endif
  1391. X  
  1392. X  #ifdef SPELLS
  1393. X  struct spell spl_book[MAXSPELL + 1] = DUMMY;
  1394. X--- 197,243 ----
  1395. X      '#', /* dbvwall */    /* used ifdef STRONGHOLD */
  1396. X      '#', /* dbhwall */    /* used ifdef STRONGHOLD */
  1397. X  };
  1398. X! symbol_array showsyms = DUMMY; /* will contain the symbols actually used */
  1399. X  #ifdef REINCARNATION
  1400. X! symbol_array savesyms = DUMMY;
  1401. X! #endif
  1402. X! 
  1403. X! char *explainsyms[MAXPCHARS] = {
  1404. X!     "a dark part of a room", "a wall", "a wall",
  1405. X!     "a wall", "a wall", "a wall",
  1406. X!     "a wall", "a wall", "a wall",
  1407. X!     "a wall", "a wall", "a wall",
  1408. X!     "a wall", "a wall", "a wall",
  1409. X!     "a wall", "a doorway", "an open door",
  1410. X!     "an open door", "a closed door", "the floor of a room",
  1411. X!     "a corridor", "a staircase up", "a staircase down",
  1412. X!     "a trap", "a web", "a water filled area",
  1413. X! #ifdef FOUNTAINS
  1414. X!     "a fountain",
  1415. X! #else
  1416. X!     "",
  1417. X! #endif
  1418. X! #ifdef SINKS
  1419. X!     "a sink",
  1420. X! #else
  1421. X!     "",
  1422. X! #endif
  1423. X! #ifdef THRONES
  1424. X!     "an opulent throne",
  1425. X! #else
  1426. X!     "",
  1427. X! #endif
  1428. X! #ifdef ALTARS
  1429. X!     "an altar",
  1430. X! #else
  1431. X!     "",
  1432. X! #endif
  1433. X! #ifdef STRONGHOLD
  1434. X!     "a ladder up", "a ladder down", "a drawbridge", "a drawbridge"
  1435. X! #else
  1436. X!     "", "", "", ""
  1437. X  #endif
  1438. X+ };
  1439. X  
  1440. X  #ifdef SPELLS
  1441. X  struct spell spl_book[MAXSPELL + 1] = DUMMY;
  1442. X*** src/Old/demon.c    Sun Nov 19 12:35:29 1989
  1443. X--- src/demon.c    Tue Oct 31 19:26:49 1989
  1444. X***************
  1445. X*** 8,16 ****
  1446. X  dsummon(ptr)        /* summon demon */
  1447. X      register struct permonst *ptr;
  1448. X  {
  1449. X      register int dtype, cnt = 0;
  1450. X  
  1451. X- #ifdef HARD
  1452. X      if(is_dprince(ptr) || (ptr == &mons[PM_WIZARD_OF_YENDOR])) {
  1453. X  
  1454. X          dtype = (!rn2(20)) ? dprince() : (!rn2(4)) ? dlord() : ndemon();
  1455. X--- 8,16 ----
  1456. X  dsummon(ptr)        /* summon demon */
  1457. X      register struct permonst *ptr;
  1458. X  {
  1459. X+ #ifdef INFERNO
  1460. X      register int dtype, cnt = 0;
  1461. X  
  1462. X      if(is_dprince(ptr) || (ptr == &mons[PM_WIZARD_OF_YENDOR])) {
  1463. X  
  1464. X          dtype = (!rn2(20)) ? dprince() : (!rn2(4)) ? dlord() : ndemon();
  1465. X***************
  1466. X*** 23,37 ****
  1467. X  
  1468. X      } else if(is_ndemon(ptr)) {
  1469. X  
  1470. X!         dtype = (!rn2(20)) ? dlord() : ndemon();
  1471. X          cnt = 1;
  1472. X      }
  1473. X  
  1474. X      if(!dtype) return;
  1475. X- #else
  1476. X-     dtype = PM_DEMON;
  1477. X-     cnt = 1;
  1478. X- #endif
  1479. X  
  1480. X      while(cnt > 0) {
  1481. X  
  1482. X--- 23,33 ----
  1483. X  
  1484. X      } else if(is_ndemon(ptr)) {
  1485. X  
  1486. X!         dtype = (!rn2(20)) ? dlord() : (!rn2(6)) ? ndemon() : monsndx(ptr);
  1487. X          cnt = 1;
  1488. X      }
  1489. X  
  1490. X      if(!dtype) return;
  1491. X  
  1492. X      while(cnt > 0) {
  1493. X  
  1494. X***************
  1495. X*** 38,47 ****
  1496. X          (void)makemon(&mons[dtype], u.ux, u.uy);
  1497. X          cnt--;
  1498. X      }
  1499. X      return;
  1500. X  }
  1501. X  
  1502. X! #ifdef HARD
  1503. X  #define    Athome    (Inhell && !mtmp->cham)
  1504. X  
  1505. X  int
  1506. X--- 34,46 ----
  1507. X          (void)makemon(&mons[dtype], u.ux, u.uy);
  1508. X          cnt--;
  1509. X      }
  1510. X+ #else
  1511. X+     (void)makemon(&mons[PM_DEMON], u.ux, u.uy);
  1512. X+ #endif
  1513. X      return;
  1514. X  }
  1515. X  
  1516. X! #ifdef INFERNO
  1517. X  #define    Athome    (Inhell && !mtmp->cham)
  1518. X  
  1519. X  int
  1520. X***************
  1521. X*** 105,111 ****
  1522. X  }
  1523. X  #endif
  1524. X  
  1525. X! #if defined(HARD) || (defined(ALTARS) && defined(THEOLOGY))
  1526. X  long
  1527. X  bribe(mtmp)
  1528. X  struct monst *mtmp;
  1529. X--- 104,110 ----
  1530. X  }
  1531. X  #endif
  1532. X  
  1533. X! #if defined(INFERNO) || (defined(ALTARS) && defined(THEOLOGY))
  1534. X  long
  1535. X  bribe(mtmp)
  1536. X  struct monst *mtmp;
  1537. X***************
  1538. X*** 137,143 ****
  1539. X  
  1540. X  int
  1541. X  dprince() {
  1542. X! #ifdef HARD
  1543. X      int    tryct, pm;
  1544. X  
  1545. X      for(tryct = 0; tryct < 20; tryct++) {
  1546. X--- 136,142 ----
  1547. X  
  1548. X  int
  1549. X  dprince() {
  1550. X! #ifdef INFERNO
  1551. X      int    tryct, pm;
  1552. X  
  1553. X      for(tryct = 0; tryct < 20; tryct++) {
  1554. X***************
  1555. X*** 153,159 ****
  1556. X  
  1557. X  int
  1558. X  dlord() {
  1559. X! #ifdef HARD
  1560. X      int    tryct, pm;
  1561. X  
  1562. X      for(tryct = 0; tryct < 20; tryct++) {
  1563. X--- 152,158 ----
  1564. X  
  1565. X  int
  1566. X  dlord() {
  1567. X! #ifdef INFERNO
  1568. X      int    tryct, pm;
  1569. X  
  1570. X      for(tryct = 0; tryct < 20; tryct++) {
  1571. X***************
  1572. X*** 169,175 ****
  1573. X  
  1574. X  int
  1575. X  ndemon() {
  1576. X! #ifdef HARD
  1577. X      int    tryct;
  1578. X      struct    permonst *ptr;
  1579. X  
  1580. X--- 168,174 ----
  1581. X  
  1582. X  int
  1583. X  ndemon() {
  1584. X! #ifdef INFERNO
  1585. X      int    tryct;
  1586. X      struct    permonst *ptr;
  1587. X  
  1588. X*** src/Old/do.c    Sun Nov 19 12:35:45 1989
  1589. X--- src/do.c    Fri Nov 17 19:31:29 1989
  1590. X***************
  1591. X*** 1,4 ****
  1592. X! /*    SCCS Id: @(#)do.c    3.0    89/06/12
  1593. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1594. X  /* NetHack may be freely redistributed.  See license for details. */
  1595. X  
  1596. X--- 1,4 ----
  1597. X! /*    SCCS Id: @(#)do.c    3.0    89/11/15
  1598. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1599. X  /* NetHack may be freely redistributed.  See license for details. */
  1600. X  
  1601. X***************
  1602. X*** 12,18 ****
  1603. X  extern boolean level_exists[];
  1604. X  #endif
  1605. X  
  1606. X! static int drop P((struct obj *));
  1607. X  
  1608. X  static const char drop_types[] = { '0', GOLD_SYM, '#', 0 };
  1609. X  
  1610. X--- 12,20 ----
  1611. X  extern boolean level_exists[];
  1612. X  #endif
  1613. X  
  1614. X! #ifndef OVERLAY
  1615. X! static int FDECL(drop, (struct obj *));
  1616. X! #endif
  1617. X  
  1618. X  static const char drop_types[] = { '0', GOLD_SYM, '#', 0 };
  1619. X  
  1620. X***************
  1621. X*** 31,37 ****
  1622. X  int x,y;
  1623. X  {
  1624. X      struct trap *t = t_at(x,y);
  1625. X!     boolean pool = IS_POOL(levl[x][y].typ);
  1626. X  
  1627. X      if(obj->otyp == BOULDER && (pool ||
  1628. X        (t && (t->ttyp==PIT || t->ttyp==SPIKED_PIT || t->ttyp==TRAPDOOR)))) {
  1629. X--- 33,39 ----
  1630. X  int x,y;
  1631. X  {
  1632. X      struct trap *t = t_at(x,y);
  1633. X!     boolean pool = is_pool(x,y);
  1634. X  
  1635. X      if(obj->otyp == BOULDER && (pool ||
  1636. X        (t && (t->ttyp==PIT || t->ttyp==SPIKED_PIT || t->ttyp==TRAPDOOR)))) {
  1637. X***************
  1638. X*** 86,97 ****
  1639. X  {
  1640. X      if (Blind) return;
  1641. X      if (obj->blessed || obj->cursed) {
  1642. X!         register const char *fcolor = Hallucination ? hcolor() :
  1643. X!                     obj->blessed ? amber : black;
  1644. X! 
  1645. X!         pline("There is %s %s flash as %s hit%s the altar.",
  1646. X!               index(vowels, *fcolor) ? "an" : "a",
  1647. X!               fcolor,
  1648. X                doname(obj),
  1649. X                (obj->quan==1) ? "s" : "");
  1650. X          if (!Hallucination) obj->bknown = 1;
  1651. X--- 88,96 ----
  1652. X  {
  1653. X      if (Blind) return;
  1654. X      if (obj->blessed || obj->cursed) {
  1655. X!         pline("There is %s flash as %s hit%s the altar.",
  1656. X!               an(Hallucination ? hcolor() :
  1657. X!              obj->blessed ? amber : black),
  1658. X                doname(obj),
  1659. X                (obj->quan==1) ? "s" : "");
  1660. X          if (!Hallucination) obj->bknown = 1;
  1661. X***************
  1662. X*** 125,131 ****
  1663. X      You("drop %s down the drain.", doname(obj));
  1664. X      switch(obj->otyp) {    /* effects that can be noticed without eyes */
  1665. X          case RIN_SEARCHING:
  1666. X!     You("thought your %s got lost in the sink, but there it is!",
  1667. X              xname(obj));
  1668. X          dropx(obj);
  1669. X          trycall(obj);
  1670. X--- 124,130 ----
  1671. X      You("drop %s down the drain.", doname(obj));
  1672. X      switch(obj->otyp) {    /* effects that can be noticed without eyes */
  1673. X          case RIN_SEARCHING:
  1674. X!         You("thought your %s got lost in the sink, but there it is!",
  1675. X              xname(obj));
  1676. X          dropx(obj);
  1677. X          trycall(obj);
  1678. X***************
  1679. X*** 181,192 ****
  1680. X              break;
  1681. X          case RIN_HUNGER:
  1682. X              ideed = FALSE;
  1683. X!             for(otmp=fobj; otmp; otmp=otmp2) {
  1684. X!             otmp2 = otmp->nobj;
  1685. X!             if(otmp->ox == u.ux && otmp->oy == u.uy)
  1686. X!                 if(otmp != uball && otmp != uchain) {
  1687. X!                 pline("Suddenly, %s vanishes from the sink!",
  1688. X!                                 doname(otmp));
  1689. X                  delobj(otmp);
  1690. X                  ideed = TRUE;
  1691. X              }
  1692. X--- 180,190 ----
  1693. X              break;
  1694. X          case RIN_HUNGER:
  1695. X              ideed = FALSE;
  1696. X!             for(otmp = level.objects[u.ux][u.uy]; otmp; otmp = otmp2) {
  1697. X!             otmp2 = otmp->nexthere;
  1698. X!             if(otmp != uball && otmp != uchain) {
  1699. X!                 pline("Suddenly, %s vanishes from the sink!",
  1700. X!                             doname(otmp));
  1701. X                  delobj(otmp);
  1702. X                  ideed = TRUE;
  1703. X              }
  1704. X***************
  1705. X*** 269,275 ****
  1706. X      return(TRUE);
  1707. X  }
  1708. X  
  1709. X! static int
  1710. X  drop(obj) register struct obj *obj; {
  1711. X      if(!obj) return(0);
  1712. X      if(obj->olet == GOLD_SYM) {        /* pseudo object */
  1713. X--- 267,276 ----
  1714. X      return(TRUE);
  1715. X  }
  1716. X  
  1717. X! #ifndef OVERLAY
  1718. X! static 
  1719. X! #endif
  1720. X! int
  1721. X  drop(obj) register struct obj *obj; {
  1722. X      if(!obj) return(0);
  1723. X      if(obj->olet == GOLD_SYM) {        /* pseudo object */
  1724. X***************
  1725. X*** 501,508 ****
  1726. X              if (otmp == uwep)
  1727. X                  setuwep((struct obj *)0);
  1728. X              if ((otmp != uwep) && (canletgo(otmp, ""))) {
  1729. X!                 Your("%s left behind on the stairs.",
  1730. X!                      aobjnam(otmp, "get"));
  1731. X                  dropx(otmp);
  1732. X              }
  1733. X          }
  1734. X--- 502,509 ----
  1735. X              if (otmp == uwep)
  1736. X                  setuwep((struct obj *)0);
  1737. X              if ((otmp != uwep) && (canletgo(otmp, ""))) {
  1738. X!                 Your("%s you down the stairs.",
  1739. X!                      aobjnam(otmp, "follow"));
  1740. X                  dropx(otmp);
  1741. X              }
  1742. X          }
  1743. X***************
  1744. X*** 561,569 ****
  1745. X  {
  1746. X      register int fd;
  1747. X      register boolean up = (newlevel < dlevel);
  1748. X-     boolean stair_fall = (at_stairs && !up && ((inv_weight() + 5 > 0) || 
  1749. X-                           Punished || Fumbling));
  1750. X-     boolean stair_drag = FALSE;
  1751. X  
  1752. X  #ifdef ENDGAME
  1753. X      if(dlevel == ENDLEVEL) return;    /* To be on the safe side.. */
  1754. X--- 562,567 ----
  1755. X***************
  1756. X*** 689,702 ****
  1757. X      }
  1758. X  #endif
  1759. X      if(Punished) unplacebc();
  1760. X-     if (stair_fall) {
  1761. X- #ifdef STRONGHOLD
  1762. X-             You("fall down the %s.",
  1763. X-                 !at_ladder ? "stairs" : "ladder");
  1764. X- #else
  1765. X-         You("fall down the stairs.");
  1766. X- #endif
  1767. X-     }
  1768. X      u.utrap = 0;                /* needed in level_tele */
  1769. X      u.ustuck = 0;                /* idem */
  1770. X      keepdogs();
  1771. X--- 687,692 ----
  1772. X***************
  1773. X*** 723,733 ****
  1774. X      if (newlevel == rogue_level || dlevel == rogue_level) {
  1775. X          /* No graphics characters on Rogue levels */
  1776. X          if (dlevel != rogue_level) {
  1777. X!             savesyms = showsyms;
  1778. X!             showsyms = defsyms;
  1779. X          }
  1780. X          if (newlevel != rogue_level)
  1781. X!             showsyms = savesyms;
  1782. X      }
  1783. X  #endif
  1784. X      dlevel = newlevel;
  1785. X--- 713,728 ----
  1786. X      if (newlevel == rogue_level || dlevel == rogue_level) {
  1787. X          /* No graphics characters on Rogue levels */
  1788. X          if (dlevel != rogue_level) {
  1789. X!             (void) memcpy((genericptr_t)savesyms,
  1790. X!                       (genericptr_t)showsyms, sizeof savesyms);
  1791. X!             (void) memcpy((genericptr_t)showsyms,
  1792. X!                       (genericptr_t)defsyms, sizeof showsyms);
  1793. X!             showsyms[S_vodoor] = showsyms[S_hodoor] = 
  1794. X!                 showsyms[S_ndoor] = '+';
  1795. X          }
  1796. X          if (newlevel != rogue_level)
  1797. X!             (void) memcpy((genericptr_t)showsyms,
  1798. X!                       (genericptr_t)savesyms, sizeof showsyms);
  1799. X      }
  1800. X  #endif
  1801. X      dlevel = newlevel;
  1802. X***************
  1803. X*** 806,814 ****
  1804. X              u.uy = yupladder;
  1805. X          }
  1806. X  #endif
  1807. X!         if(stair_fall) {
  1808. X              if (Punished) {
  1809. X!                 if (stair_drag)
  1810. X                      litter();
  1811. X                  if (carried(uball)) {
  1812. X                      if (uwep == uball)
  1813. X--- 801,816 ----
  1814. X              u.uy = yupladder;
  1815. X          }
  1816. X  #endif
  1817. X!         if(at_stairs && !up && ((inv_weight() + 5 > 0) || 
  1818. X!                     Punished || Fumbling)) {
  1819. X! #ifdef STRONGHOLD
  1820. X!             You("fall down the %s.",
  1821. X!                 !at_ladder ? "stairs" : "ladder");
  1822. X! #else
  1823. X!             You("fall down the stairs.");
  1824. X! #endif
  1825. X              if (Punished) {
  1826. X!                 if (drag_down())
  1827. X                      litter();
  1828. X                  if (carried(uball)) {
  1829. X                      if (uwep == uball)
  1830. X***************
  1831. X*** 904,910 ****
  1832. X--- 906,914 ----
  1833. X      return(1);    /* Do nothing, but let other things happen */
  1834. X  }
  1835. X  
  1836. X+ #ifndef OVERLAY
  1837. X  static
  1838. X+ #endif
  1839. X  int
  1840. X  wipeoff() {
  1841. X      if(u.ucreamed < 4)    u.ucreamed = 0;
  1842. X*** src/Old/do_name.c    Sun Nov 19 12:36:26 1989
  1843. X--- src/do_name.c    Wed Nov  8 22:56:28 1989
  1844. X***************
  1845. X*** 1,4 ****
  1846. X! /*    SCCS Id: @(#)do_name.c    3.0    88/11/24
  1847. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1848. X  /* NetHack may be freely redistributed.  See license for details. */
  1849. X  
  1850. X--- 1,4 ----
  1851. X! /*    SCCS Id: @(#)do_name.c    3.0    89/11/08
  1852. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  1853. X  /* NetHack may be freely redistributed.  See license for details. */
  1854. X  
  1855. X***************
  1856. X*** 32,42 ****
  1857. X  int force; char *goal;
  1858. X  {
  1859. X      register int cx, cy, i, c;
  1860. X!     char *sdp = flags.num_pad ? ndir : sdir;
  1861. X      if(flags.verbose) pline("(For instructions type a ?)");
  1862. X      cx = cc->x;
  1863. X      cy = cc->y;
  1864. X      curs(cx,cy+2);
  1865. X      while((c = readchar()) != '.'){
  1866. X          for(i=0; i<8; i++) if(sdp[i] == c){
  1867. X              if(1 <= cx + xdir[i] && cx + xdir[i] <= COLNO)
  1868. X--- 32,47 ----
  1869. X  int force; char *goal;
  1870. X  {
  1871. X      register int cx, cy, i, c;
  1872. X!     const char *sdp = flags.num_pad ? ndir : sdir;
  1873. X      if(flags.verbose) pline("(For instructions type a ?)");
  1874. X      cx = cc->x;
  1875. X      cy = cc->y;
  1876. X+ #ifdef CLIPPING
  1877. X+     cliparound(cx, cy);
  1878. X+     (void) win_curs(cx, cy);
  1879. X+ #else
  1880. X      curs(cx,cy+2);
  1881. X+ #endif
  1882. X      while((c = readchar()) != '.'){
  1883. X          for(i=0; i<8; i++) if(sdp[i] == c){
  1884. X              if(1 <= cx + xdir[i] && cx + xdir[i] <= COLNO)
  1885. X***************
  1886. X*** 63,69 ****
  1887. X--- 68,79 ----
  1888. X              return;
  1889. X          }
  1890. X      nxtc:    ;
  1891. X+ #ifdef CLIPPING
  1892. X+         cliparound(cx, cy);
  1893. X+         (void) win_curs(cx, cy);
  1894. X+ #else
  1895. X          curs(cx,cy+2);
  1896. X+ #endif
  1897. X      }
  1898. X      cc->x = cx;
  1899. X      cc->y = cy;
  1900. X***************
  1901. X*** 112,118 ****
  1902. X           if(!mtmp->mtame) {
  1903. X           pline("%s gets %sangry!", Monnam(mtmp),
  1904. X                 mtmp->mpeaceful ? "" : "very ");
  1905. X!          mtmp->mpeaceful = mtmp->msleep = 0;
  1906. X           }
  1907. X           return(0);
  1908. X       }
  1909. X--- 122,129 ----
  1910. X           if(!mtmp->mtame) {
  1911. X           pline("%s gets %sangry!", Monnam(mtmp),
  1912. X                 mtmp->mpeaceful ? "" : "very ");
  1913. X!          mtmp->mpeaceful = 0;
  1914. X!         mtmp->msleep = 0;
  1915. X           }
  1916. X           return(0);
  1917. X       }
  1918. X***************
  1919. X*** 132,140 ****
  1920. X  }
  1921. X  
  1922. X  /*
  1923. X!  * This routine changes the address of  obj . Be careful not to call it
  1924. X   * when there might be pointers around in unknown places. For now: only
  1925. X!  * when  obj  is in the inventory.
  1926. X   */
  1927. X  static
  1928. X  void
  1929. X--- 143,151 ----
  1930. X  }
  1931. X  
  1932. X  /*
  1933. X!  * This routine changes the address of obj. Be careful not to call it
  1934. X   * when there might be pointers around in unknown places. For now: only
  1935. X!  * when obj is in the inventory.
  1936. X   */
  1937. X  static
  1938. X  void
  1939. X***************
  1940. X*** 168,174 ****
  1941. X  char    *buf;
  1942. X  register int ininv;
  1943. X  {
  1944. X!     register struct obj *otmp, *otmp2;
  1945. X      register int    lth;
  1946. X  
  1947. X      lth = *buf ? strlen(buf)+1 : 0;
  1948. X--- 179,185 ----
  1949. X  char    *buf;
  1950. X  register int ininv;
  1951. X  {
  1952. X!     register struct obj *otmp, *otmp2, *contents;
  1953. X      register int    lth;
  1954. X  
  1955. X      lth = *buf ? strlen(buf)+1 : 0;
  1956. X***************
  1957. X*** 210,215 ****
  1958. X--- 221,230 ----
  1959. X              }
  1960. X          }
  1961. X      }
  1962. X+     if (Is_container(obj)) {
  1963. X+         for(contents=fcobj; contents; contents=contents->nobj)
  1964. X+             if(contents->cobj==obj) contents->cobj = otmp2;
  1965. X+     }
  1966. X      /* obfree(obj, otmp2);    /* now unnecessary: no pointers on bill */
  1967. X      free((genericptr_t) obj);    /* let us hope nobody else saved a pointer */
  1968. X      return otmp2;
  1969. X***************
  1970. X*** 272,281 ****
  1971. X      if (otemp.corpsenm) { /* kludge, meaning it's sink water */
  1972. X          pline("Call a stream of %s fluid: ",
  1973. X                  objects[otemp.otyp].oc_descr);
  1974. X!     } else {
  1975. X!         str = xname(&otemp);
  1976. X!         pline("Call %s %s: ", index(vowels,*str) ? "an" : "a", str);
  1977. X!     }
  1978. X      getlin(buf);
  1979. X      clrlin();
  1980. X      if(!*buf || *buf == '\033')
  1981. X--- 287,294 ----
  1982. X      if (otemp.corpsenm) { /* kludge, meaning it's sink water */
  1983. X          pline("Call a stream of %s fluid: ",
  1984. X                  objects[otemp.otyp].oc_descr);
  1985. X!     } else
  1986. X!         pline("Call %s: ", an(xname(&otemp)));
  1987. X      getlin(buf);
  1988. X      clrlin();
  1989. X      if(!*buf || *buf == '\033')
  1990. X***************
  1991. X*** 345,356 ****
  1992. X  
  1993. X      switch(mtmp->data->mlet) {
  1994. X          case S_GHOST:
  1995. X!         { register char *gn = (char *) mtmp->mextra;
  1996. X            if(!*gn) {        /* might also look in scorefile */
  1997. X              gn = ghostnames[rn2(SIZE(ghostnames))];
  1998. X              Strcpy((char *) mtmp->mextra, !rn2(5) ? plname : gn);
  1999. X            }
  2000. X!           Sprintf(buf, "%s's ghost", gn);
  2001. X          }
  2002. X          break;
  2003. X          default:
  2004. X--- 358,369 ----
  2005. X  
  2006. X      switch(mtmp->data->mlet) {
  2007. X          case S_GHOST:
  2008. X!         { register const char *gn = (const char *) mtmp->mextra;
  2009. X            if(!*gn) {        /* might also look in scorefile */
  2010. X              gn = ghostnames[rn2(SIZE(ghostnames))];
  2011. X              Strcpy((char *) mtmp->mextra, !rn2(5) ? plname : gn);
  2012. X            }
  2013. X!           Sprintf(buf, "%s's ghost", (char *) mtmp->mextra);
  2014. X          }
  2015. X          break;
  2016. X          default:
  2017. X***************
  2018. X*** 472,479 ****
  2019. X      int name;
  2020. X  
  2021. X      do {
  2022. X!         name = rn2(PM_CHAMELEON);
  2023. X!         /* chameleon: last monster before player classes */
  2024. X      } while(type_is_pname(&mons[name]) || (mons[name].geno & G_NOGEN));
  2025. X      return(mons[name].mname);
  2026. X  }
  2027. X--- 485,492 ----
  2028. X      int name;
  2029. X  
  2030. X      do {
  2031. X!         name = rn2(PM_ARCHEOLOGIST);
  2032. X!         /* archeologist: first player class */
  2033. X      } while(type_is_pname(&mons[name]) || (mons[name].geno & G_NOGEN));
  2034. X      return(mons[name].mname);
  2035. X  }
  2036. X*** src/Old/do_wear.c    Sun Nov 19 12:36:52 1989
  2037. X--- src/do_wear.c    Sat Nov 11 17:29:31 1989
  2038. X***************
  2039. X*** 24,35 ****
  2040. X  /* for items that involve no delay */
  2041. X  static void
  2042. X  on_msg(otmp) register struct obj *otmp; {
  2043. X-     register char *bp = xname(otmp);
  2044. X-     char buf[BUFSZ];
  2045. X- 
  2046. X-     setan(bp, buf);
  2047. X      if(flags.verbose)
  2048. X!         You("are now wearing %s.", buf);
  2049. X  }
  2050. X  
  2051. X  boolean
  2052. X--- 24,31 ----
  2053. X  /* for items that involve no delay */
  2054. X  static void
  2055. X  on_msg(otmp) register struct obj *otmp; {
  2056. X      if(flags.verbose)
  2057. X!         You("are now wearing %s.", an(xname(otmp)));
  2058. X  }
  2059. X  
  2060. X  boolean
  2061. X***************
  2062. X*** 72,78 ****
  2063. X   * The Type_off() functions call setworn() themselves.
  2064. X   */
  2065. X  
  2066. X! static int
  2067. X  Boots_on() {
  2068. X      long oldprop =
  2069. X          u.uprops[objects[uarmf->otyp].oc_oprop].p_flgs & ~(WORN_BOOTS | TIMEOUT);
  2070. X--- 68,77 ----
  2071. X   * The Type_off() functions call setworn() themselves.
  2072. X   */
  2073. X  
  2074. X! #ifndef OVERLAY
  2075. X! static 
  2076. X! #endif
  2077. X! int
  2078. X  Boots_on() {
  2079. X      long oldprop =
  2080. X          u.uprops[objects[uarmf->otyp].oc_oprop].p_flgs & ~(WORN_BOOTS | TIMEOUT);
  2081. X***************
  2082. X*** 220,226 ****
  2083. X      return 0;
  2084. X  }
  2085. X  
  2086. X! static int
  2087. X  Helmet_on() {
  2088. X      switch(uarmh->otyp) {
  2089. X      case FEDORA:
  2090. X--- 219,228 ----
  2091. X      return 0;
  2092. X  }
  2093. X  
  2094. X! #ifndef OVERLAY
  2095. X! static 
  2096. X! #endif
  2097. X! int
  2098. X  Helmet_on() {
  2099. X      switch(uarmh->otyp) {
  2100. X      case FEDORA:
  2101. X***************
  2102. X*** 288,294 ****
  2103. X      return 0;
  2104. X  }
  2105. X  
  2106. X! static int
  2107. X  Gloves_on() {
  2108. X      long oldprop =
  2109. X      u.uprops[objects[uarmg->otyp].oc_oprop].p_flgs & ~(WORN_GLOVES | TIMEOUT);
  2110. X--- 290,299 ----
  2111. X      return 0;
  2112. X  }
  2113. X  
  2114. X! #ifndef OVERLAY
  2115. X! static 
  2116. X! #endif
  2117. X! int
  2118. X  Gloves_on() {
  2119. X      long oldprop =
  2120. X      u.uprops[objects[uarmg->otyp].oc_oprop].p_flgs & ~(WORN_GLOVES | TIMEOUT);
  2121. X***************
  2122. X*** 338,343 ****
  2123. X--- 343,356 ----
  2124. X      default: impossible("Unknown type of gloves (%d)", uarmg->otyp);
  2125. X      }
  2126. X      setworn((struct obj *)0, W_ARMG);
  2127. X+     if (uwep && uwep->otyp == CORPSE && uwep->corpsenm == PM_COCKATRICE) {
  2128. X+     /* Prevent wielding cockatrice when not wearing gloves */
  2129. X+     You("wield the cockatrice corpse in your bare %s.",
  2130. X+         makeplural(body_part(HAND)));
  2131. X+     You("turn to stone...");
  2132. X+     killer = "cockatrice corpse";
  2133. X+     done(STONING);
  2134. X+     }
  2135. X      return 0;
  2136. X  }
  2137. X  
  2138. X***************
  2139. X*** 385,391 ****
  2140. X  /* This must be done in worn.c, because one of the possible intrinsics conferred
  2141. X   * is fire resistance, and we have to immediately set HFire_resistance in worn.c
  2142. X   * since worn.c will check it before returning.
  2143. X! static int
  2144. X  Armor_on()
  2145. X  {
  2146. X      return 0;
  2147. X--- 398,407 ----
  2148. X  /* This must be done in worn.c, because one of the possible intrinsics conferred
  2149. X   * is fire resistance, and we have to immediately set HFire_resistance in worn.c
  2150. X   * since worn.c will check it before returning.
  2151. X! #ifndef OVERLAY
  2152. X! static 
  2153. X! #endif
  2154. X! int
  2155. X  Armor_on()
  2156. X  {
  2157. X      return 0;
  2158. X***************
  2159. X*** 691,696 ****
  2160. X--- 707,722 ----
  2161. X  /*    if (uarms) (void) Shield_on(); */
  2162. X  }
  2163. X  
  2164. X+ boolean
  2165. X+ donning(otmp)
  2166. X+ register struct obj *otmp;
  2167. X+ {
  2168. X+     return (otmp == uarmf && afternmv == Boots_on)
  2169. X+     || (otmp == uarmh && afternmv == Helmet_on)
  2170. X+     || (otmp == uarmg && afternmv == Gloves_on)
  2171. X+ /*    || (otmp == uarm && afternmv == Armor_on)*/;
  2172. X+ }
  2173. X+ 
  2174. X  static const char clothes[] = {ARMOR_SYM, 0};
  2175. X  static const char accessories[] = {RING_SYM, AMULET_SYM, TOOL_SYM, 0};
  2176. X  
  2177. X***************
  2178. X*** 1118,1123 ****
  2179. X--- 1144,1151 ----
  2180. X      return(1);
  2181. X  }
  2182. X  
  2183. X+ #define ARM_BONUS(obj)    ((10 - objects[obj->otyp].a_ac) + obj->spe)
  2184. X+ 
  2185. X  void
  2186. X  find_ac() {
  2187. X      register int uac = 10;
  2188. X***************
  2189. X*** 1227,1233 ****
  2190. X      }
  2191. X  }
  2192. X  
  2193. X! static int
  2194. X  select_off(otmp)
  2195. X  register struct obj *otmp;
  2196. X  {
  2197. X--- 1255,1264 ----
  2198. X      }
  2199. X  }
  2200. X  
  2201. X! #ifndef OVERLAY
  2202. X! static 
  2203. X! #endif
  2204. X! int
  2205. X  select_off(otmp)
  2206. X  register struct obj *otmp;
  2207. X  {
  2208. X***************
  2209. X*** 1332,1338 ****
  2210. X      return(otmp);
  2211. X  }
  2212. X  
  2213. X! static int
  2214. X  take_off() {
  2215. X  
  2216. X      register int i;
  2217. X--- 1363,1372 ----
  2218. X      return(otmp);
  2219. X  }
  2220. X  
  2221. X! #ifndef OVERLAY
  2222. X! static 
  2223. X! #endif
  2224. X! int
  2225. X  take_off() {
  2226. X  
  2227. X      register int i;
  2228. END_OF_FILE
  2229. if test 53756 -ne `wc -c <'patches06e'`; then
  2230.     echo shar: \"'patches06e'\" unpacked with wrong size!
  2231. fi
  2232. # end of 'patches06e'
  2233. fi
  2234. echo shar: End of archive 8 \(of 15\).
  2235. cp /dev/null ark8isdone
  2236. MISSING=""
  2237. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ; do
  2238.     if test ! -f ark${I}isdone ; then
  2239.     MISSING="${MISSING} ${I}"
  2240.     fi
  2241. done
  2242. if test "${MISSING}" = "" ; then
  2243.     echo You have unpacked all 15 archives.
  2244.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  2245. else
  2246.     echo You still need to unpack the following archives:
  2247.     echo "        " ${MISSING}
  2248. fi
  2249. ##  End of shell archive.
  2250. exit 0
  2251.